package club.westudy.distributed.lock.annotation;

import club.westudy.distributed.lock.internal.InternalLockExecutorService;

import java.lang.annotation.*;

/**
 * 分布式锁注解，能够标注在需要作为临界区的方法上
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DistributedLock {
    /**
     * 定义当前方法需要加锁的特征字符串, 支持spEL表达式
     * @return 特征字符串
     */
    String feature();

    /**
     * 最大锁持有租期，单位毫秒
     */
    long maxLeaseTimeMs() default 6000;

    /**
     * 锁排队等待时间，单位毫秒
     * @return
     */
    long tryLockWaitTimeMs() default 0;

    /**
     * 加锁服务类型
     * @return 获取加锁服务,默认情况取值为InternalLockExecutorService.class,属于自动识别锁的执行服务
     */
    Class<? extends InternalLockExecutorService> lockExecutorService() default InternalLockExecutorService.class;
}
